package cn.bonoon.kernel.support.searcher;

import cn.bonoon.kernel.bytecode.EntityReader;
import cn.bonoon.kernel.bytecode.QueryConverter;
import cn.bonoon.kernel.descriptors.EntityDescriptor;
import cn.bonoon.kernel.events.ReadEvent;
import cn.bonoon.kernel.support.ProxyEntityManager;

/**
 * <pre>
 * 对象提供的查询处理；对应每一种类型的实体都应该有一个相应的查询器。
 * 
 * 注意这个查询器不同于service，为什么这里还要定义这样一个查询器呢？
 * 1. 不是所有的实体都会定义service的；
 * 2. 很生成自动加载实体的时候，并不知道是哪个entityClass的service；
 * </pre>
 * @author jackson
 *
 */
public interface ISearcher {
	EntityDescriptor getEntityDescriptor();
	EntityReader getEntityReader(Class<?> rc) throws Exception;
	QueryConverter getQueryConverter(Class<?> cc) throws Exception;
	
	String orderby();
	
	String allEntities();
	
	String treeRoot();
	
	String treeChildren();
	
	StandardFinder finder(ProxyEntityManager manager);
	
	StandardFinder finder(ProxyEntityManager manager, ReadEvent readEvent, Class<?> resultClassType)throws Exception;
}
